var uploaderColumns=[[
	              {field:'checkbox',checkbox:true},
	              {field:'id',hidden:true},
				  {field:'file_name',title:'名称',width:300,editor:{
					type:'textbox',options:{}
				  }},
				  {field:'file_type',title:'文件类型',width:100},
	              {field:'file_size',title:'大小',width:100}
	              //,{field:'upload_progress',title:'上传进度',sortable:true}
	          ]];
var uploaderGridOptions ={
			idField:'id',//指定id字段
		    singleSelect: true,//单选
			rownumbers:true,//显示序号
			columns:uploaderColumns//定义显示列
		};
var uploadDg=undefined;
uploader=undefined;
$(function(){
	$('#removefiles').bind('click', removefiles);//删除行绑定事件
	$('#uploadfiles').bind('click', function(){uploader.start();});//上传按钮事件绑定
	
});
var defaultOption={
		//runtimes : 'html5,flash,silverlight,html4',//用来指定上传方式，指定多个上传方式请使用逗号隔开。一般情况下，你不需要配置该参数，因为Plupload默认会根据你的其他的参数配置来选择最合适的上传方式。如果没有特殊要求的话，Plupload会首先选择html5上传方式，如果浏览器不支持html5，则会使用flash或silverlight，如果前面两者也都不支持，则会使用最传统的html4上传方式。如果你想指定使用某个上传方式，或改变上传方式的优先顺序，则你可以配置该参数。
		browse_button : 'pickfiles', //触发文件选择对话框的DOM元素，当点击该元素后便后弹出文件选择对话框。该值可以是DOM元素对象本身，也可以是该DOM元素的id
		//container: 'buttonPanel', //用来指定Plupload所创建的html结构的父容器，默认为前面指定的browse_button的父元素。该参数的值可以是一个元素的id,也可以是DOM元素本身。
		url : "/authenticated/upload",//服务器端接收和处理上传文件的脚本地址，可以是相对路径(相对于当前调用Plupload的文档)，也可以是绝对路径
		multi_selection:true,//是否可以在文件浏览对话框中选择多个文件，true为可以，false为不可以
		multiple_queues:false,//是否可以多次上传
		unique_names : true,//当值为true时会为每个上传的文件生成一个唯一的文件名，并作为额外的参数post到服务器端，参数明为name,值为生成的文件名。
		max_file_size : '5mb', //上传最大限制
        chunk_size : '300kb', //分片上传文件时，每片文件被切割成的大小，为数字时单位为字节。也可以使用一个带单位的字符串，如"200kb"。当该值为0时表示不使用分片上传功能，这个值小于服务器最大上传限制的值即可。 
        //headers:null,//设置上传时的自定义头信息，以键/值对的形式传入，键代表头信息属性名，键代表属性值。html4上传方式不支持设置该属性。
        multipart:true,//为true时将以multipart/form-data的形式来上传文件，为false时则以二进制的格式来上传文件。html4上传方式不支持以二进制格式来上传文件，在flash上传方式中，二进制上传也有点问题。并且二进制格式上传还需要在服务器端做特殊的处理。一般我们用multipart/form-data的形式来上传文件就足够了。
        multipart_params:multipart_params,//上传时的附加参数，以键/值对的形式传入
        file_data_name:'file',//指定文件上传时文件域的名称，默认为file
        /**
         * 可以使用该参数对将要上传的图片进行压缩，该参数是一个对象，里面包括5个属性：
			width：指定压缩后图片的宽度，如果没有设置该属性则默认为原始图片的宽度				
			height：指定压缩后图片的高度，如果没有设置该属性则默认为原始图片的高度				
			crop：是否裁剪图片				
			quality：压缩后图片的质量，只对jpg格式的图片有效，默认为90。quality可以跟width和height一起使用，但也可以单独使用，单独使用时，压缩后图片的宽高不会变化，但由于质量降低了，所以体积也会变小
			preserve_headers：压缩后是否保留图片的元数据，true为保留，false为不保留,默认为true。删除图片的元数据能使图片的体积减小一点点
			resize参数的配置示例如下：
			resize: {
			  width: 100,
			  height: 100,
			  crop: true,
			  quality: 60,
			  preserve_headers: false
			}					
         */
        // Resize images on client-side if we can
        //resize : { width : 320, height : 240, quality : 90 },
        /**
         * 可以使用该参数来限制上传文件的类型，大小等，该参数以对象的形式传入，它包括三个属性：
			mime_types：用来限定上传文件的类型，为一个数组，该数组的每个元素又是一个对象，该对象有title和extensions两个属性，title为该过滤器的名称，extensions为文件扩展名，有多个时用逗号隔开。该属性默认为一个空数组，即不做限制。
			max_file_size：用来限定上传文件的大小，如果文件体积超过了该值，则不能被选取。值可以为一个数字，单位为b,也可以是一个字符串，由数字和单位组成，如'200kb'
			prevent_duplicates：是否允许选取重复的文件，为true时表示不允许，为false时表示允许，默认为false。如果两个文件的文件名和大小都相同，则会被认为是重复的文件
			filters完整的配置示例如下(当然也可以只配置其中的某一项)：
			filters: {
			  mime_types : [ //只允许上传图片和zip文件
			    { title : "Image files", extensions : "jpg,gif,png" }, 
			    { title : "Zip files", extensions : "zip" }
			  ],
			  max_file_size : '400kb', //最大只能上传400kb的文件
			  prevent_duplicates : true //不允许选取重复文件
			}					
        */
		filters : {
			max_file_size : '2mb',
            mime_types: [ 
                {title : "image files", extensions : "gif,jpg,jpeg,png,bmp,ico"}  //gif|jpg|jpeg|png
            ],
            prevent_duplicates : true//不允许选取重复文件
        },
        //flash_swf_url : '../js/Moxie.swf',//flash上传组件的url地址，如果是相对路径，则相对的是调用Plupload的html文档。当使用flash上传方式会用到该参数。
		//silverlight_xap_url : '../js/Moxie.xap',//silverlight上传组件的url地址，如果是相对路径，则相对的是调用Plupload的html文档。当使用silverlight上传方式会用到该参数。
		// PreInit events, bound before the internal events
        preinit : {
            Init: function(up, info) {
                console.log('[Init]', 'Info:', info, 'Features:', up.features);
            },
 
            UploadFile: function(up, file) {
                console.log('[UploadFile]', file);
 
                // You can override settings before the file is uploaded
                // up.setOption('url', 'upload.php?id=' + file.id);
				multipart_params.file_type=file.type;
				multipart_params.original_file_name=file.name;
                up.setOption('multipart_params', multipart_params);
            }
        },
		
		        // Post init events, bound after the internal events
		        init : {
					PostInit: function() {
						// Called after initialization is finished and internal event handlers bound
						console.log('[PostInit]');
						
						/*document.getElementById('uploadfiles').onclick = function() {
							uploader.start();
							return false;
						};*/
					},

					Browse: function(up) {
		                // Called when file picker is clicked
		                console.log('[Browse]');
		            },

		            Refresh: function(up) {
		                // Called when the position or dimensions of the picker change
		                console.log('[Refresh]');
		            },
		 
		            StateChanged: function(up) {
		                // Called when the state of the queue is changed
		                console.log('[StateChanged]', up.state == plupload.STARTED ? "STARTED" : "STOPPED");
		            },
		 
		            QueueChanged: function(up) {
		                // Called when queue is changed by adding or removing files
		                console.log('[QueueChanged]');
		            },

					OptionChanged: function(up, name, value, oldValue) {
						// Called when one of the configuration options is changed
						console.log('[OptionChanged]', 'Option Name: ', name, 'Value: ', value, 'Old Value: ', oldValue);
					},

					BeforeUpload: function(up, file) {
						//uploader.setOption("multipart_params",{"endTime":$("#endTime").val()}); 
						// Called right before the upload for a given file starts, can be used to cancel it if required
						console.log('[BeforeUpload]');
					},
		 
		            UploadProgress: function(up, file) {
		                // Called while file is being uploaded
		                //console.log('[UploadProgress]', 'File:', file, "Total:", up.total);
		            },

					FileFiltered: function(up, file) {
						// Called when file successfully files all the filters
		                console.log('[FileFiltered]');
					},
		 
		            /*FilesAdded: function(up, files) {
		                // Called when files are added to queue
		                console.log('[FilesAdded]');
						 plupload.each(files, function(file) {
							console.log(file);
							var newRowData={id:file.id,file_name:file.name,file_type:file.type,file_size:plupload.formatSize(file.size),upload_progress:0};//初始化行数据
							
							dg.datagrid('appendRow',newRowData);
							
							//document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
						});
		                plupload.each(files, function(file) {
		                    console.log('  File:');
		                });
		            },*/
		 
		            FilesRemoved: function(up, files) {
		                // Called when files are removed from queue
		                console.log('[FilesRemoved]');
		                /*plupload.each(files, function(file) {
		                    console.log('  File:');
		                });*/
		            },
		 
		            FileUploaded: function(up, file, info) {
		                // Called when file has finished uploading
		                console.log('[FileUploaded] File:');
						var deleteIndex=uploadDg.datagrid('getRowIndex',file.id);
						uploadDg.datagrid('deleteRow', deleteIndex);
						uploader.removeFile(file.id);
		            },
		 
		            ChunkUploaded: function(up, file, info) {
		                // Called when file chunk has finished uploading
		                console.log('[ChunkUploaded] File:');
		            },

					/*UploadComplete: function(up, files) {
						// Called when all files are either uploaded or failed
		                console.log('[UploadComplete]');
						$.messager.alert("提示", "上传完成！");
					},*/

					Destroy: function(up) {
						// Called when uploader is destroyed
		                console.log('[Destroy] ');
					},
		 
		            Error: function(up, err) {
		                // Called when error occurs
		             	$.messager.alert("提示", "上传失败:"+err.message);
		            }
		        }
};
var multipart_params={};
function removefiles(){
	var selectRow=uploadDg.datagrid('getSelections');
	if(selectRow.length>0){
		$.each(selectRow,function(i,v){
			var deleteIndex=uploadDg.datagrid('getRowIndex',v);
			uploadDg.datagrid('deleteRow', deleteIndex);
			uploader.removeFile(v.id);
		});
	}
}
var dialogid="uploadImageDialog";

function closeploadimage(){
	$('#'+dialogid).dialog('close');
}
/**
 * 
 * @param uploaderOtion plupload参数
 * @param file_id 模块定义id
 * @param target_id 目标数据表id
 */
function inituploader(uploaderOtion,file_id,target_id){
	$('#'+dialogid).dialog('open');
	if(uploader==undefined){
		var myOption= $.extend({},defaultOption,uploaderOtion);
		multipart_params.file_id=file_id;
		multipart_params.target_id=target_id;
		uploader = new plupload.Uploader(myOption);
		uploader.init();
		uploader.bind('FilesAdded',function(up, files){//文件添加到上传队列
			plupload.each(files, function(file){
				var newRowData={id:file.id,file_name:file.name,file_type:file.type,file_size:plupload.formatSize(file.size),upload_progress:0};//初始化行数据
				uploadDg.datagrid('appendRow',newRowData);
			});
	    });
		uploadDg=$('#pictureGrid');
		uploadDg.datagrid(uploaderGridOptions);
		uploader.bind('UploadComplete',function(up, files){//文件全部上传完成
			$.messager.alert("提示", "上传完成！");
			//editForm-logo_img
			//单图上传完成后的查询
			//var imageurl=getimageurl();
			//$("#editForm-logo").val(imageurl);
			//$("#editForm-logo_img").attr("src",imageurl);
			closeploadimage();
	    });
	}
}

function getimageurl(){
	//单图上传完成后的查询
	var resultObject=$.parseJSON($.ajax({
		async:false,
		type: "post",
		url: "/authenticated/ajax/map/select_get_access_url_dt",
		data:JSON.stringify(multipart_params),
		success: function(result){
			
		}
	}).responseText);
	
	if(resultObject.success){
		return resultObject.data.access_url;
	}else{
		alert(resultObject.message);
		return "error";
	}
}